草庐IT

C++ 对和指针

全部标签

c++ - 理解指向函数的指针的问题

在selectionsort的签名之前,我对大部分程序都很好,其中有一个指向名为compare的函数的指针,但我在这段代码中的任何地方都看不到该函数。我想我想问的是比较是如何工作的?//Fig.8.20:fig08_20.cpp//Multipurposesortingprogramusingfunctionpointers.#include#includeusingnamespacestd;//prototypesvoidselectionSort(int[],constint,bool(*)(int,int));voidswap(int*const,int*const);boola

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录1->引用1.1->引用概念1.2->引用特性 1.3->常引用1.4->使用场景1.5->传值、传引用效率比较1.6->值和引用作为返回值类型的性能比较1.7->引用和指针的区别2->内联函数2.1->概念2.2->特性3->auto关键字(C++11)3.1->类型别名思考3.2->auto简介3.3->auto的使用细则3.4->auto不能推导的场景4->基于范围的for循环(C++11)4.1->范围for的语法4.2->范围for的使用条件5->指针空值nullptr(C++11)5.1->C++98中的指针空值1->引用1.1->引用概念引用不是新定义一个变量,而是给已经存在

c++ - C++ 中的读写线程安全智能指针,x86-64

我开发了一些无锁数据结构,但出现了以下问题。我有一个编写器线程,它在堆上创建对象并将它们包装在带有引用计数器的智能指针中。我也有很多阅读线程,它们与这些对象一起工作。代码可能如下所示:SmartPtrptr;classReader:publicThread{virtualvoidRun{for(;;){SmartPtrlocal(ptr);//dosmth}}};classWriter:publicThread{virtualvoidRun{for(;;){SmartPtrnewPtr(newObject);ptr=newPtr;}}};intmain(){Pool*pool=Syst

c++ - 为什么可以将指针与 '\0' 进行比较? (但不是 'A' )

我在我的代码中发现了一个错误,我将指针与“\0”进行了比较。想知道为什么编译器没有警告我这个错误,我尝试了以下方法。#includestructFoo{charbar[5];};intmain(){Foof;Foo*p=&f;p->bar[0]='\0';assert(p->bar=='\0');//#1.Iforgot[]Now,comparingpointerwithNULLandfails.assert(p->bar=='A');//#2.error:ISOC++forbidscomparisonbetweenpointerandintegerassert(p->bar[0]==

c++ - 指针是否保证 > 某个值?

在C++中,当我执行new(甚至malloc)时,是否可以保证返回地址将大于某个值?因为...在这个项目中,我发现使用0-1k作为枚举非常有用。但如果有可能获得那么低的值(value),我不想那样做。我唯一的目标系统是带有OSwindow/linux和mac的32位或64位CPU。标准是否对指针有任何说明?Windows或Linux是否说明了它们的C运行时以及最低内存地址(对于ram)是什么?-edit-我最终修改了我的new重载以检查地址是否大于1k。如果没有,我会调用std::terminate。 最佳答案 就标准而言,没有什么

c++ - 为什么 C++ 智能指针实现将引用计数器与指针一起保存在堆上?

阅读Alexandrescu和wikipipidia我看到指针和引用计数器存储在堆上。然后提到引用计数效率低下,因为必须在堆上分配计数器?为什么不存储在堆栈中? 最佳答案 因为一旦智能指针的当前实例超出范围,您就会丢失它。智能指针用于模拟动态分配的自动存储对象。智能指针本身是自动管理的。因此,当一个人被摧毁时,它存储在自动存储中的任何东西也会被摧毁。但是您不想丢失引用计数器。所以你将它存储在动态存储中。 关于c++-为什么C++智能指针实现将引用计数器与指针一起保存在堆上?,我们在Sta

c++ - ofstream 指针的 vector

这是我的问题,我需要创建X个文件并根据不同的因素写入它们,我的解决方案是创建一个像这样的流指针vector#include#include#include#include#includevectorfiles;files.resize(SplitVec.size()-4);for(i=0;i(i);cout直到这一部分,它创建的文件都很好,后来在我写给它们的程序中,这也很好,我的问题是当我想关闭对象时,如果我使用:for(i=0;i我收到以下错误:Infileincludedfrommain.cpp:14:./methyl.h:298:error:requestformember'cl

c++ - 当值为指针时尝试读取或写入 protected 内存

我有这个代码:typedefstruct{stringfName;stringstr;}t;//-------Otherfunctions------//voidBeginTh(){stringarg="yes";t*arglist;arglist=(t*)malloc(sizeof(t));arglist->fName="comBomber";arglist->str=arg;_beginthread(startOver,0,(void*)arglist);free(arglist);}然后在'arglist->fName="comBomber";'我得到这个错误:Anunhandl

c++ - 释放后分配给指针

我正在看《编程面试暴露》一书中的以下代码:booldeleteStack(Element**stack){Element*next;while(*stack){next=(*stack)->next;free(*stack);*stack=next;}returntrue;}我对C++或C不太熟悉,所以这可能是个愚蠢的问题,但在释放指针后给它赋值不会导致问题吗? 最佳答案 在您的示例中,*stack是一个指针。释放它指向的内存然后将指针分配给新变量是完全安全的。唯一不安全的是在释放后取消引用*stack。free(*stack);n

c++ - 尝试创建指针数组时不允许使用不完整的类型

我创建了2个类,Branch和Account,我希望我的Branch类有一个Account指针数组,但我没能做到。它说“不允许不完整的类型”。我的代码有什么问题?#include#include"Account.h"usingnamespacestd;classBranch{/*--------------------publicvariables--------------*/public:Branch(intid,stringname);Branch(Branch&br);~Branch();Account*ownedAccounts[];//erroratthislinestri